package instrarbre;

import exprarbre.ASAIdent;
import java.util.ArrayList;
import java.util.HashMap;
import progarbre.ASAProg;

public class ASADeclare extends ASAInstr {

    private ArrayList<ASAIdent> idents;

    public ASADeclare(ArrayList<ASAIdent> ident) {
        this.idents = ident;
    }

    @Override
    public int getNbDeclare() {
        return idents.size();
    }

    @Override
    public void interpreter(HashMap<String, Integer> affectation) {
        int top = ASAProg.getTop();
        for (ASAIdent ident : idents) {
            Integer resultat = ident.getValeur(affectation);
            ASAProg.setTop(top);
            int pointeur = ASAProg.push(resultat);
            ident.setPointeur(pointeur);
            affectation.put(ident.getLabelExplorateur(), pointeur);
            top++;
        }
       
    }

    public ArrayList<String> getIdentifiants() {
        ArrayList<String> identifiants = new ArrayList<String>();
        for (ASAIdent ident : idents) {
            identifiants.add(ident.getLabelExplorateur());
        }
        return identifiants;
    }

    @Override
    protected String notationExplorateur(String prefixe) {
        StringBuilder res = new StringBuilder(prefixe).append(getLabelExplorateur()).append(" ");
        for (ASAIdent ident : idents) {
            res.append(ident.getLabelExplorateur()).append(", ");
        }
        res.delete(res.length() - 2, res.length());
        return res.append("\n").toString();
    }
}
